package com.core.pf;

import org.hibernate.HibernateException;


/**
 * 
 * @author jorge
 *
 */
@SuppressWarnings("serial")
public class PersistentException extends HibernateException {

    // Atributos privados
    private String mensajeTec;
    private String nombreClase;
    
    /**
     * Constructor
     * @param arg0
     */
    @SuppressWarnings("unchecked")
	public PersistentException(String mensajeTec, 
            Class nombreClass, Throwable srcException) {
        super(srcException);
        this.mensajeTec = mensajeTec;
        this.nombreClase = nombreClass.getName();
        mensaje(mensajeTec, nombreClase, srcException);
    }

    /**
     * Constructor
     * @param arg0
     * @param arg1
     */
    public PersistentException(String mensajeTec, Throwable srcException) {
        super(mensajeTec, srcException);
        this.mensajeTec = mensajeTec;
        mensaje(mensajeTec, null, srcException);
    }

    /**
     * Constructor
     * @param arg0
     */
    public PersistentException(String mensajeTec) {
        super(mensajeTec);
        this.mensajeTec = mensajeTec;
        mensaje(mensajeTec, null, null);
    }
    
    // Getters
    
    public String getMensajeTec() {
        return mensajeTec;
    }
    public String getNombreClase() {
        return nombreClase;
    }
    
    // Mensaje
    private void mensaje(String mensajeTecnico,
       String nombreClase, Throwable srcException) {

             StringBuffer buffer = new StringBuffer();

             buffer.append("<<TechnicalMessage>>\n");
             buffer.append(mensajeTecnico);

             if (srcException != null) {

               buffer.append("<<message>>\n");

               if (srcException instanceof PersistentException) {
                 PersistentException pe = (PersistentException) srcException;
                 buffer.append(pe.getMensajeTec());
               }
               else {
                 buffer.append(srcException.getMessage());
               }
             }
             mensajeTec = buffer.toString();
           }
}
